package com.cq.androidtools.datastore

import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.datastore.core.DataStore
import androidx.datastore.createDataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.createDataStore
import com.cq.androidtools.R
import com.cq.androidtools.protobuf.UserPrefs
import com.cq.base.common.SpUtils
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch

/**
 * 作者: CQ
 * 日期: 2021-03-31
 * 说明:
 */
class DataStoreActivity : AppCompatActivity() {

    lateinit var context: Context
    private val dataStore: DataStore<UserPrefs.UserPreferences> =
        this.createDataStore(
            fileName = "user_prefs.pb",
            serializer = UserPreferencesSerializer
        )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.ac_view)
        context = this

//        SpUtils.put("a", "a")
//        SpUtils.put("b", 1)
//        Log.e("---", SpUtils.getString("a"))
//        Log.e("---", SpUtils.getInt("b").toString())

        saveData(true)
    }

    fun saveData(completed: Boolean) {
        GlobalScope.launch {
            dataStore.updateData { preferences ->
                preferences.toBuilder().setShowCompleted(completed).setAge(-10).setSex(-150).build()
            }
            //4.获取数据
            val getName = dataStore.data.map {
                it
            }.collect { //flow 调用collect 开始消费数据
                Log.e("TAG", "onCreate: $it")  //打印出 jackie
            }
        }
    }


    private fun onSave() {
        // 定义一个变量：dataStore名称
        val PREFERENCE_NAME = "settings"
        // 创建一个对象
        val dataStore: DataStore<Preferences> = context.createDataStore(
            name = PREFERENCE_NAME
        )

        //2.Preferences DataStore 以键值对的形式存在本地，需要定义一个 key(比如：KEY_JACKIE)
        //Preferences DataStore 中的 key 是 Preferences.Key<T> 类型
//        存储数据key
        /**
         * 存储数据
         * key：author
         * value：CQ
         * */
        val dataKey = stringPreferencesKey("author")
        GlobalScope.launch {
            // 存储数据操作
            dataStore.edit {
                it[dataKey] = "CQ"
            }

            //4.获取数据
            val getName = dataStore.data.map {
                it[dataKey]
            }.collect { //flow 调用collect 开始消费数据
                Log.e("TAG", "onCreate: $it")  //打印出 jackie
            }
        }
    }


}